export const Amap = (<any>window).AMap

// 默认定位：初始化加载地图时，center及level属性缺省，地图默认显示用户所在城市范围
const amap = new Amap.Map('iCenter')

/**
 * 将坐标解析成地址
 * @param {Array} lnglat 经纬度
 * @returns {Promise}
 */
export function queryAddressByCoord(lnglat: Array<number>): Promise<any> {
  return new Promise((resolve, reject) => {
    const callback = () => {
      const geocoder = new Amap.Geocoder({
        radius: 1000, // 以已知坐标为中心点，radius为半径，返回范围内兴趣点和道路信息
        extensions: 'all', // 返回地址描述以及附近兴趣点和道路信息，默认"base"
      })
      // 返回地理编码结果
      Amap.event.addListener(geocoder, 'complete', (data: any) => {
        if (!data) return reject(null)
        resolve(data.regeocode)
      })
      // 逆地理编码
      geocoder.getAddress(new Amap.LngLat(lnglat[0], lnglat[1]))
    }
    // 加载地理编码插件
    amap.plugin(['AMap.Geocoder'], callback)
  })
}

/**
 * 其他坐标系转成高德的坐标系
 * 例如gps的[116.3, 39.9] gps
 * @param {Array} lnglat 坐标
 * @param {String} type 坐标系，缺省 gps
 * @returns {Promise}
 */
export function convertCoordinateSystem(
  lnglat: number[],
  type = 'gps',
): Promise<any> {
  return new Promise((resolve, reject) => {
    Amap.convertFrom(lnglat, type, (status: number, result: any) => {
      console.log(result)
      if (result.info === 'ok') {
        const res = result.locations[0]
        resolve([res.lng, res.lat]) // Array.<LngLat>
        return
      }
      reject(false)
    })
  })
}

/* setTimeout(() => {
  console.log("setTimeout");
  convertCoordinateSystem([106.4945, 29.6188]).then((res: any) => {
    console.log(res);
    queryAddressByCoord(res).then((rs: any) => {
      console.log(rs);
    });
  });
}, 1 * 1000); */

export default amap
